package com.article.dao;

import java.util.List;

public interface IBaseDAO<T> {
	/**
	 * 插入新记录
	 * 
	 * @param obj
	 */
	void insert(T obj);

	/**
	 * 更新记录
	 * 
	 * @param obj
	 */
	void update(T obj);

	/**
	 * 删除记录
	 * 
	 * @param id
	 */
	void delete(int id);

	/**
	 * 根据主键查找实体
	 * 
	 * @param id
	 * @return
	 */
	T find(int id);

	/**
	 * 根据实体属性查找实体
	 * 
	 * @param propertyName
	 * @param propertyValue
	 * @return
	 */
	List<T> findByProperty(String propertyName, Object propertyValue);

	/**
	 * 查找所有实体
	 * 
	 * @return
	 */
	List<T> findAll();

	/**
	 * 分页查找所有实体
	 * 
	 * @param start
	 * @param limit
	 * @return
	 */
	List<T> findAllByPage(int start, int limit);

	/**
	 * 所有实体总数
	 * 
	 * @return
	 */
	Object findAllCount();

	/**
	 * 根据查询语句查找
	 * 
	 * @param hql
	 * @param args
	 * @return
	 */
	List<T> findResultList(String hql, Object... args);

	/**
	 * 根据查询语句分页查找
	 * 
	 * @param hql
	 * @param start
	 * @param limit
	 * @param args
	 * @return
	 */
	List<T> findResultListByPage(String hql, int start, int limit,
			Object... args);

	/**
	 * 根据查询语句查询结果总数
	 * 
	 * @return
	 */
	Object findResultCount(String hql, Object... args);
}
